1
Исследование успеваемости
DSAI2202Lab 8: Composing Data Operations

Команде учебной поддержки нужен список активных зачислений, успеваемость которых снизилась в последнее время. Сравните каждого студента с его собственной предыдущей успеваемостью по тому же курсу.

Согласуйте правила

  1. Используйте два периода: earlier и recent. В каждом по две равнозначные работы.
  2. Требуйте не менее двух не-NULL оценок в каждом периоде перед сравнением средних.
  3. Вычислите decline_points = earlier_avg - recent_avg.
  4. Снижение на 15 баллов и более означает Review. В остальных случаях подходящее зачисление получает No alert.
  5. Оставляйте Insufficient data отдельно. Ноль — это допустимая оценка; NULL или отсутствующая запись — не ноль.

Подготовьте базу данных

Откройте прилагаемый файл lab8_setup.sql из папки ассистента DSAI2202/lab8/ в pgAdmin и выполните файл целиком. При каждом новом подключении снова используйте настройки подключения справа.

В ходе настройки также создаётся performance_comparison— сохранённый запрос, называемый представлением. Он пригодится в последующих упражнениях; это не дополнительная таблица с сохранёнными результатами оценивания.

✍️ Проверьте перед вычислениями
Изучите E01, E07, E08, E09 и E24. Определите, у кого достаточно оценок в обоих периодах. Объясните, почему нули у E24 — более весомое свидетельство, чем значения NULL у E08.
Задать схему
SET search_path TO lab8;
Проверить количество
SET search_path TO lab8;

SELECT 'students' AS table_name, COUNT(*) AS row_count
FROM students
UNION ALL SELECT 'courses', COUNT(*) FROM courses
UNION ALL SELECT 'enrolments', COUNT(*) FROM enrolments
UNION ALL SELECT 'assessment_results', COUNT(*) FROM assessment_results
UNION ALL SELECT 'support_units', COUNT(*) FROM support_units
ORDER BY table_name;
Изучить данные
SET search_path TO lab8;

SELECT e.enrolment_id, e.student_id, e.course_code,
       r.result_id, r.period, r.assessment_no, r.score
FROM enrolments AS e
JOIN assessment_results AS r
  ON r.enrolment_id = e.enrolment_id
WHERE e.enrolment_id IN ('E01', 'E07', 'E08', 'E09', 'E24')
ORDER BY e.enrolment_id, r.period, r.assessment_no;